#!/bin/bash

#####################################################################
# 服务器诊断脚本
# 用于检查部署问题
#####################################################################

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

APP_NAME="kaizeli-app"
APP_JAR="/opt/kaizeli/website-0.0.1-SNAPSHOT.jar"
LOG_DIR="/opt/kaizeli/logs"

echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}  应用诊断工具${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""

# 1. 检查服务状态
echo -e "${YELLOW}[1] 检查服务状态${NC}"
if systemctl is-active --quiet $APP_NAME; then
    echo -e "${GREEN}✓${NC} 服务正在运行"
    systemctl status $APP_NAME --no-pager -l
else
    echo -e "${RED}✗${NC} 服务未运行"
    echo "启动服务: sudo systemctl start $APP_NAME"
fi
echo ""

# 2. 检查JAR包是否存在
echo -e "${YELLOW}[2] 检查JAR包${NC}"
if [ -f "$APP_JAR" ]; then
    echo -e "${GREEN}✓${NC} JAR包存在: $APP_JAR"
    ls -lh "$APP_JAR"
    echo "修改时间: $(stat -c %y "$APP_JAR" 2>/dev/null || stat -f "%Sm" "$APP_JAR" 2>/dev/null)"
else
    echo -e "${RED}✗${NC} JAR包不存在: $APP_JAR"
fi
echo ""

# 3. 检查JAR包内的静态文件
echo -e "${YELLOW}[3] 检查JAR包内的静态文件${NC}"
if [ -f "$APP_JAR" ]; then
    echo "BOOT-INF/classes/static/ 目录内容:"
    unzip -l "$APP_JAR" | grep "BOOT-INF/classes/static/"
    
    echo ""
    echo "检查 WebConfig.class 修改时间:"
    unzip -l "$APP_JAR" | grep "WebConfig.class"
else
    echo -e "${RED}✗${NC} 无法检查，JAR包不存在"
fi
echo ""

# 4. 检查应用日志
echo -e "${YELLOW}[4] 最近的应用日志 (最后30行)${NC}"
if [ -f "$LOG_DIR/app.log" ]; then
    tail -n 30 "$LOG_DIR/app.log"
else
    echo "使用 journalctl 查看日志:"
    journalctl -u $APP_NAME -n 30 --no-pager
fi
echo ""

# 5. 检查错误日志
echo -e "${YELLOW}[5] 最近的错误日志 (最后20行)${NC}"
if [ -f "$LOG_DIR/error.log" ]; then
    tail -n 20 "$LOG_DIR/error.log"
else
    echo "没有错误日志文件"
fi
echo ""

# 6. 测试端口连接
echo -e "${YELLOW}[6] 测试应用端口 8086${NC}"
if netstat -tuln | grep -q ":8086"; then
    echo -e "${GREEN}✓${NC} 端口 8086 正在监听"
    netstat -tuln | grep ":8086"
else
    echo -e "${RED}✗${NC} 端口 8086 未监听"
fi
echo ""

# 7. 测试HTTP请求
echo -e "${YELLOW}[7] 测试HTTP请求${NC}"
echo "测试 /login.html:"
curl -I http://localhost:8086/login.html 2>/dev/null | head -n 5
echo ""
echo "测试 /static/login.html:"
curl -I http://localhost:8086/static/login.html 2>/dev/null | head -n 5
echo ""

# 8. 检查配置文件
echo -e "${YELLOW}[8] 检查配置文件${NC}"
CONFIG_FILE="/opt/kaizeli/application-prod.yml"
if [ -f "$CONFIG_FILE" ]; then
    echo -e "${GREEN}✓${NC} 配置文件存在"
    echo "端口配置:"
    grep -A 1 "^server:" "$CONFIG_FILE"
else
    echo -e "${RED}✗${NC} 配置文件不存在: $CONFIG_FILE"
fi
echo ""

# 9. 检查Java进程
echo -e "${YELLOW}[9] 检查Java进程${NC}"
ps aux | grep "website-0.0.1-SNAPSHOT.jar" | grep -v grep
echo ""

echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}  诊断完成${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
echo -e "${GREEN}常用命令:${NC}"
echo "  查看实时日志: sudo journalctl -u $APP_NAME -f"
echo "  重启服务:     sudo systemctl restart $APP_NAME"
echo "  查看服务状态: sudo systemctl status $APP_NAME"
echo "  解压查看JAR:  unzip -l $APP_JAR | grep static"


